---@class GT.destructible 破坏物
---@field destructible Destructible 破坏物对象
GT.destructible=class()

---@class destructible_data 破坏物
---@field destructible Destructible 破坏物对象



function GT.destructible:ctor(data)
    self.destructible=data.destructible
end

---转对象
---@param destructible Destructible
---@return GT.destructible
function GT.destructible.obj(destructible)
    ---@type destructible_data
    local data = {
        destructible = destructible
    }
    return new(GT.destructible, data)
end


--- 创建可破坏物
---@param location GT.point 位置
---@param dest_key DestructibleKey 物品编号
---@param angle Fixed 面向角度
---@param size Float 大小
---@return GT.destructible
function GT.destructible.create_destructible(location,dest_key,angle,size)
    return GT.destructible.obj(game_api.create_destructible(location.point,dest_key,angle,size)) 
end

--- 创建可破坏物
---@param dest_key DestructibleKey 物品编号
---@param location GT.point 位置
---@param angle Fixed 面向角度
---@param scale_x Float 缩放x
---@param scale_y Float 缩放y
---@param scale_z Float 缩放z
---@param height_offset Float 高度
---@return GT.destructible
function GT.destructible.create_destructible_new(dest_key,location,angle,scale_x,scale_y,scale_z,height_offset)
    return GT.destructible.obj(game_api.create_destructible_new(dest_key,location.point,angle,scale_x,scale_y,scale_z,height_offset)) 
end


--- 移动可破坏物到点
---@param point Point 点
function GT.destructible:api_transmit(point)
    self.destructible.api_transmit(point)
end

--- 杀死可破坏物
---@param unit Unit 凶手单位
function GT.destructible:api_kill(unit)
    self.destructible.api_kill(unit)
end

--- 使可破坏物枯竭
---@param unit Unit 采集单位
function GT.destructible:api_set_dest_dry(unit)
    self.destructible.api_set_dest_dry(unit)
end

--- 删除可破坏物
function GT.destructible:api_delete()
    self.destructible.api_delete()
end

--- 复活可破坏物
---@param point Point 复活点
function GT.destructible:api_revivie(point)
    self.destructible.api_revivie(point)
end

--- 显示隐藏可破坏物
---@param is_show Bool 是否显示
function GT.destructible:api_show_hide(is_show)
    self.destructible.api_show_hide(is_show)
end

--- 设置可破坏物生命值
---@param hp_value UInt64 生命值
function GT.destructible:api_set_hp(hp_value)
    self.destructible.api_set_hp(hp_value)
end

--- 设置可破坏物最大生命值
---@param hp_value UInt64 最大生命值
function GT.destructible:api_set_max_hp(hp_value)
    self.destructible.api_set_max_hp(hp_value)
end

--- 设置可破坏物的名称
---@param name Str 名称
function GT.destructible:api_set_name(name)
    self.destructible.api_set_name(name)
end

--- 设置可破坏物的资源数量
---@param num UInt64 资源数量
function GT.destructible:api_set_source_num(num)
    self.destructible.api_set_source_num(num)
end

--- 设置可破坏物的大小
---@param x UInt64 x大小
---@param y UInt64 y大小
---@param z UInt64 z大小
function GT.destructible:api_set_scale(x,y,z)
    self.destructible.api_set_scale(x,y,z)
end

--- 设置可破坏物的角度
---@param angle Fixed 角度
function GT.destructible:api_set_face_angle(angle)
    self.destructible.api_set_face_angle(angle)
end

--- 获取可破坏物的整型属性
---@param attr_name Str 属性名称
---@return UInt32
function GT.destructible:api_get_int_attr(attr_name)
    return self.destructible.api_get_int_attr(attr_name)
end

--- 获取可破坏物的编号
---@return DestructibleKey
function GT.destructible:get_DestructibleKey()
    return self.destructible.api_get_key()
end

--- 获取可破坏物的字符串属性
---@param attr_name Str 属性名称
---@return Str
function GT.destructible:api_get_str_attr(attr_name)
    return self.destructible.api_get_str_attr(attr_name)
end

--- 设置可破坏物的字符串属性
---@param attr_name Str 属性名称
---@param value Str 属性取值
function GT.destructible:api_set_str_attr(attr_name,value)
    self.destructible.api_set_str_attr(attr_name,value)
end

--- 获取可破坏物的布尔值属性
---@param attr_name Str 属性名称
---@return Bool
function GT.destructible:api_get_bool_attr(attr_name)
    return self.destructible.api_get_bool_attr(attr_name)
end

--- 获取可破坏物的浮点数属性
---@param attr_name Str 属性名称
---@return Fixed
function GT.destructible:api_get_float_attr(attr_name)
    return self.destructible.api_get_float_attr(attr_name)
end

--- 获取可破坏物所属阵营id
---@return CampID
function GT.destructible:api_get_camp_id()
    return self.destructible.api_get_camp_id()
end

--- 获取可破坏物位置
---@return FVector3
function GT.destructible:api_get_position()
    return self.destructible.api_get_position()
end

--- 获取可破坏物的id
function GT.destructible:api_get_id()
    self.destructible.api_get_id()
end

--- 获取可破坏物的x轴缩放
---@return Float
function GT.destructible:api_get_x_scale()
    return self.destructible.api_get_x_scale()
end

--- 获取可破坏物的y轴缩放
---@return Float
function GT.destructible:api_get_y_scale()
    return self.destructible.api_get_y_scale()
end

--- 获取可破坏物的z轴缩放
---@return Float
function GT.destructible:api_get_z_scale()
    return self.destructible.api_get_z_scale()
end

--- 获取可破坏物的旋转角度
---@return Float
function GT.destructible:api_get_angle()
    return self.destructible.api_get_angle()
end

--- 获取可破坏物模型
---@return ModelKey
function GT.destructible:api_get_dest_model()
    return self.destructible.api_get_dest_model()
end

--- 可破坏物能否被技能指示器选中
---@return Bool
function GT.destructible:api_is_ability_target()
    return self.destructible.api_is_ability_target()
end

--- 可破坏物能否被普通攻击
---@return Bool
function GT.destructible:api_is_attacked()
    return self.destructible.api_is_attacked()
end

--- 可破坏物能否被选中
---@return Bool
function GT.destructible:api_is_selected()
    return self.destructible.api_is_selected()
end

--- 可破坏物能否被采集
---@return Bool
function GT.destructible:api_is_collected()
    return self.destructible.api_is_collected()
end

--- 可破坏物是否可见
---@return Bool
function GT.destructible:api_is_visible()
    return self.destructible.api_is_visible()
end

--- 可破坏物是否存活
---@return Bool
function GT.destructible:api_is_alive()
    return self.destructible.api_is_alive()
end

--- 获取可破坏物的当前资源
---@return UInt64
function GT.destructible:api_get_dest_cur_source_nums()
    return self.destructible.api_get_dest_cur_source_nums()
end

--- 获取可破坏物的最大资源
---@return UInt64
function GT.destructible:api_get_dest_max_source_nums()
    return self.destructible.api_get_dest_max_source_nums()
end

--- 获取可破坏物的玩家属性
---@return RoleResKey
function GT.destructible:api_get_role_res_of_dest()
    return self.destructible.api_get_role_res_of_dest()
end

--- 获取可破坏物的物品类型
---@return ItemKey
function GT.destructible:api_get_item_type_of_dest()
    return self.destructible.api_get_item_type_of_dest()
end

--- 获取可破坏物的面向角度
---@return Fixed
function GT.destructible:api_get_dest_face_angle()
    return self.destructible.api_get_dest_face_angle()
end

--- 获取可破坏物的高度
---@return Fixed
function GT.destructible:api_get_dest_height_offset()
    return self.destructible.api_get_dest_height_offset()
end

--- 复活可破坏物
function GT.destructible:api_revivie_new()
    self.destructible.api_revivie_new()
end

--- 设置可破坏物能否被技能指示器选中
---@param bool_value Bool 布尔值
function GT.destructible:api_set_dest_is_ability_target(bool_value)
    self.destructible.api_set_dest_is_ability_target(bool_value)
end

--- 设置可破坏物能否被普通攻击
---@param bool_value Bool 布尔值
function GT.destructible:api_set_dest_is_attacked(bool_value)
    self.destructible.api_set_dest_is_attacked(bool_value)
end

--- 设置可破坏物能否被选中
---@param bool_value Bool 布尔值
function GT.destructible:api_set_dest_is_selected(bool_value)
    self.destructible.api_set_dest_is_selected(bool_value)
end

--- 设置可破坏物能否被采集
---@param bool_value Bool 布尔值
function GT.destructible:api_set_dest_is_collected(bool_value)
    self.destructible.api_set_dest_is_collected(bool_value)
end

--- 可破坏物添加标签
---@param tag Str TAG
function GT.destructible:api_add_tag(tag)
    self.destructible.api_add_tag(tag)
end

--- 可破坏物移除标签
---@param tag Str TAG
function GT.destructible:api_remove_tag(tag)
    self.destructible.api_remove_tag(tag)
end

--- 设置可破坏物能的当前资源个数
---@param sp_value Fixed 资源数
function GT.destructible:api_set_cur_source_nums(sp_value)
    self.destructible.api_set_cur_source_nums(sp_value)
end

--- 设置可破坏物能的最大资源个数
---@param sp_value Fixed 资源数
function GT.destructible:api_set_max_source_nums(sp_value)
    self.destructible.api_set_max_source_nums(sp_value)
end

--- 增加可破坏物能的当前生命值
---@param delta Fixed 当前生命值
function GT.destructible:api_add_hp_cur_value(delta)
    self.destructible.api_add_hp_cur_value(delta)
end

--- 增加可破坏物能的最大生命值
---@param delta Fixed 最大生命值
function GT.destructible:api_add_hp_max_value(delta)
    self.destructible.api_add_hp_max_value(delta)
end

--- 增加可破坏物能的当前资源个数
---@param delta Fixed 当前资源数
function GT.destructible:api_add_sp_cur_value(delta)
    self.destructible.api_add_sp_cur_value(delta)
end

--- 增加可破坏物能的最大资源个数
---@param delta Fixed 最大资源数
function GT.destructible:api_add_sp_max_value(delta)
    self.destructible.api_add_sp_max_value(delta)
end

--- 可破坏物播放动画
---@param name Str 动画名称
---@param init_time Float 开始时间(s)
---@param end_time Float 结束时间(s)，正数 -1 表示不结束
---@param loop Bool 是否循环
---@param rate Float 播放倍率
function GT.destructible:api_play_animation(name,init_time,end_time,loop,rate)
    self.destructible.api_play_animation(name,init_time,end_time,loop,rate)
end

--- 可破坏物停止播放动画
---@param name Str 动画名称
function GT.destructible:api_stop_animation(name)
    self.destructible.api_stop_animation(name)
end

--- 可破坏物替换模型
---@param target_model ModelKey 目标模型编号
function GT.destructible:api_replace_model(target_model)
    self.destructible.api_replace_model(target_model)
end

--- 取消可破坏物替换模型
---@param target_model ModelKey 目标模型名字
function GT.destructible:api_cancel_replace_model(target_model)
    self.destructible.api_cancel_replace_model(target_model)
end

--- 设置可破坏物的高度
---@param height_value Fixed 高度值
function GT.destructible:api_set_height_offset(height_value)
    self.destructible.api_set_height_offset(height_value)
end

--- 增加可破坏物的高度
---@param delta Fixed 高度变化值
function GT.destructible:api_add_height_offset(delta)
    self.destructible.api_add_height_offset(delta)
end

--- 获取可破坏物类型
---@return DestructibleKey
function GT.destructible:get_dest_type()
    return game_api.get_dest_type(self.destructible)
end

--- 判断可破坏物是否在区域中
---@param area Area 区域
---@return Bool
function GT.destructible:is_dest_in_area(area)
    return game_api.is_dest_in_area(self.destructible,area)
end


--- 返回指定可破坏物类型的名称
---@return Str
function GT.destructible:get_dest_name_by_type()
    return game_api.get_dest_name_by_type(self:get_DestructibleKey())
end

--- 返回指定可破坏物类型的描述
---@return Str
function GT.destructible:get_dest_desc_by_type()
    return game_api.get_dest_desc_by_type(self:get_DestructibleKey())
end

--- 获取可破坏物类型的模型
---@return ModelKey
function GT.destructible:get_model_key_of_dest_key()
    return game_api.get_dest_desc_by_type(self:get_DestructibleKey())
end

--- 可破坏物是否存在
---@param destructible GT.destructible 可破坏物
---@return Bool
function  GT.destructible.destructible_is_exist(destructible)
    return game_api.destructible_is_exist(destructible.destructible)
end


